#include <string>

using namespace std;

// 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
// 如果剩余字符少于 k 个，则将剩余字符全部反转。
// 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。

class Solution {
public:
    void reverse (string& s, int begin, int end){
        while (begin < end){
            swap(s[begin], s[end]);
            begin++;
            end--;
        }
    }

    string reverseStr(string s, int k) {
        int begin = 0;
        int end = 2 * k - 1;
        while (end < s.size()){
            reverse(s, begin, begin + k - 1);
            begin = end + 1;
            end = end + 2 * k;
        }
        if (begin < s.size()){
            end = s.size();
            if (end - begin >= k){
                reverse(s, begin, begin + k - 1);
            }
            else{
                reverse(s, begin, s.size() - 1);
            }
        }
        return s;
    }
};
